package com.study;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.stream.Collectors;

/**
 * @Description: 学习Stream流操作
 * @Author: csc
 * @Date: 2024/4/22 16:09
 * @Version: 1.0
 **/
public class TestStream extends Object{


    public static void main(String[] args) {
        // TestStream.filterTest();
        mapTest();
    }



    /**
        sorted 的作用是排序
     */
    public static void sortedTest() {
        //sorted 的作用是排序
        List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 2, 4, 6);
        List<Integer> collect = numbers.stream().sorted().collect(Collectors.toList());
        //1,2,3,4,5,6,7
         collect.forEach(System.out::println);
    }

    /**
     2、distinct()
     作用：
     去除重复元素
     这个方法是通过类的 equals 方法来判断两个元素是否相等的
     */
    public static void distinctTest(){
        List<Integer> numbers2 = Arrays.asList(1, 1, 3, 7, 3, 7, 5);
        List<Integer> collect1 = numbers2.stream().distinct().collect(Collectors.toList());
        //1 3 7 5
        collect1.forEach(System.out::println);
    }


    /**
     * 3. filter(x-> x % 2 ==0)
     * 的作用是过滤 按照条件过滤
     */
    public static void filterTest(){
        List<Integer> numbers = Arrays.asList(1, 4, 3, 6, 3, 7, 10);
        List<Integer> collect = numbers.stream().filter(v -> v % 2 == 0).collect(Collectors.toList());
        collect.forEach(System.out::println);
    }


    public static void mapTest(){
        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        // 将列表转换成map，键是数字，值是出现的次数
        Map<Integer, Long> numberCounts = numbers.stream()
                .collect(Collectors.toMap(n -> n, n -> 1L, Long::sum));
        System.out.println(numberCounts);
//输出结果：[9, 4, 49, 25]  其中distinct()是去掉重复的值。

    }





}
